Map & WeakMap方法
Map 结构
js
// ================= 总结 =====================
// Map 是一种键值对集合的数据结构,类似于对象
// Map 允许任何类型的值(包括对象、函数、基本类型等)作为键,而对象的键只能是字符串或 Symbol
// Map 中的键值对是有序的,按插入顺序排列
// Map 有明确的大小属性,可以直接获取键值对数量
// ================= 常用 API ===================
// 创建: new Map([['male','男'],['female','女']])
// 增改:set(key, value)
// 删:delete(key)、clear()
// 查:has(key)、get(key)、size
// 遍历:keys()、values()、entries()、forEach()、for of
const gender = new Map([['male','男'],['female','女']])
console.log(gender)
console.log(gender.size)
console.log(gender.keys())
console.log(gender.values())
console.log(gender.entries())WeakMap 结构
js
// ================= 总结 =====================
// WeakMap 键必须是对象(不能是原始值)
// WeakMap 键是弱引用的(不影响垃圾回收),当键对象没有其他引用时,会被垃圾回收
// WeakMap 没有 size 属性
// WeakMap 不可枚举,无迭代方法
// WeakMap 的性能强于 Map
// ================= 使用场景 =====================
// 临时存储对象、不想阻止这些对象被垃圾回收、仅需要检查对象是否存在于集合中,比如私有属性存储、临时缓存、DOM 元素元数据等
// ================= 常用 API ===================
// 创建: new WeakMap([['male','男'],['female','女']])
// 增改:set(key, value)
// 删:delete(key)、clear()
// 查:has(key)、get(key)、size 无
// 遍历(无):keys()、values()、entries()、forEach()、for of
const gender = new WeakMap([[[1],'男'],[[2],'女']])
console.log(gender)
console.log(gender.size)
console.log(gender.keys())
console.log(gender.values())
console.log(gender.entries())Set & WeakSet方法
Set 结构
js
// ================= 总结 =====================
// Set 是纯粹的集合
// Set 没有键只有值,是纯粹的集合结构,所以就查询而言只查询是否有某个值和集合长度(没有键,自然不会有根据键查值)
// ================= 常用 API ===================
// 创建: new Set([...arr])
// 增:add()
// 删:delete()、clear()
// 查:has()、size
// 遍历:keys()、values()、entries()、forEach()、for of,注意:keys()、values()、entries() 的结果只有值没有索引
// ================= 集合(交集、并集、差集处理优势)===========
const setA = new Set([1, 2, 3, 4, 5]);
const setB = new Set([4, 5, 6, 7, 8]);
setA.add(100)
setA.delete(1)
console.log('setA',setA)
console.log('长度',setA.size)
// 1. 并集 (A ∪ B)
function union(setA, setB) {
return new Set([...setA, ...setB]);
}
// 2. 交集 (A ∩ B)
function intersection(setA, setB) {
return new Set([...setA].filter(x => setB.has(x)));
}
// 3. 差集 (A - B)
function difference(setA, setB) {
return new Set([...setA].filter(x => !setB.has(x)));
}
console.log('并集',union(setA, setB))
console.log('交集',intersection(setA, setB))
console.log('差集',difference(setA, setB))WeakSet 结构
js
// ================= 总结 =====================
// WeakSet 只能存储对象,不能存储原始值
// WeakSet 对存储的对象是弱引用,如果对象在外部没有其他引用,会被垃圾回收
// WeakSet 没有 size 属性
// WeakSet 适合临时存储对象,不会阻止垃圾回收
// ================= 使用场景 =====================
// 临时存储对象、不想阻止这些对象被垃圾回收、仅需要检查对象是否存在于集合中,比如用于存储 DOM 元素,当元素被移除时自动从集合中消失
// ================= 常用 API ===================
// 创建: new WeakSet([...arr])
// 增:add()
// 删:delete() 删除只能删除引用、clear() 没有 clear
// 查:has()、size 没有 size
// 遍历:keys()、values()、entries()、forEach()、for of,没有迭代、不可迭代
// ================= 不适合集合(交集、并集、差集处理优势)===========
const ar1 = [1]
const setA = new WeakSet([ar1, [2], [3], [4], [5]]);
setA.add([65])
setA.delete(ar1)
console.info('setA',setA)